// 这个模块，对于axios进行二次封装，可以方便的进行自定义axios
import axios from 'axios'
import { getUser } from '@/utils/storage.js'
import JSONbig from 'json-bigint'

// 在这里进行axios的配置
// 可以使用自定义配置新建一个axios实例，可以写自己的配置项
const http = axios.create({
  baseURL: 'http://ttapi.research.itcast.cn', // 基地址
  // timeout: 1000, //请求等待延时时间
  // headers: {'X-Custom-Header': 'footer'} // 请求头
  transformResponse: [function (data) {
    // 这里的data是字符串，在这个字符串的是没有丢失精度的，所以需要在这里先把精度调好
    // console.log(data)

    // 后端返回的数据可能不是JSON字符串，而JSONbig.parse()只能处理JSON字符串，try catch一下
    try {
      // 填写可能出现错误的代码
      // 作用1：把json字符串转为js对象
      // 作用2：把里面的大数字做安全处理
      return JSONbig.parse(data)
    } catch (err) {
      // 填写代码错误后该怎么办
      return data
    }
  }]
})

http.interceptors.request.use(function (config) {
  // 在请求发送出去之前，可以在这里做一些事情，在这里，统一携带token
  const userInfo = getUser()
  // 判断是否有token, 如果有，就携带上
  if (userInfo.token) {
    config.headers.Authorization = `Bearer ${userInfo.token}`
  }
  return config
}, function (error) {
  return Promise.reject(error)
})

export default http
